package modellayer;
import java.util.ArrayList;
import java.io.*;
import java.net.URISyntaxException;
import java.net.URL;

/**
 * Klassen VareCont er en container af Vare
 * 
 * @author Søren Kaae
 * @version 09.12.2014
 */
public class VareCont
{
    private static VareCont instance;
    private ArrayList<Vare> varer;
    private VareFileHandler fileHandler;

    /**
     * Singleton Constructor for objects of class VareCont
     */
    private VareCont()
    {
        varer = new ArrayList<Vare>();
        fileHandler = new VareFileHandler("vareData");
    }

    /**
     * Singleton Method getInstance
     * Creates a VareCont if one does not exist
     * @return instance
     */
    public static VareCont getInstance()
    {
        if(instance == null)
        {
            instance = new VareCont();
        }
        return instance;
    }

    /**
     * Method addVare
     * Adds a Vare v to the ArrayList varer
     * @param v A parameter
     */
    public boolean addVare(Vare v)
    {
        boolean succes = false;
        boolean erDer = false;
        for(Vare vare : varer)
        {
            if(vare.getStregkode() == v.getStregkode())
            {
                erDer = true;
            }
        }
        if(erDer != true)
        {
            varer.add(v);
            if(getVare(v.getVareID()) != null)
            {
                succes = true;
            }
        }
        return succes;
    }

    /**
     * Method getVarer
     *
     * @return varer
     */
    public ArrayList<Vare> getVarer()
    {
        return varer;
    }

    /**
     * Method getVare
     *
     * @param vareID A parameter
     * @return v Vare
     */
    public Vare getVare(int vareID)
    {
        int i=0;
        boolean found = false;
        Vare v = null;
        while (!found && i < varer.size()) 
        {       
            if (vareID == varer.get(i).getVareID())
            { 
                v = varer.get(i);
                found = true;

            }
            else 
            {
                i++;
            }
        }
        return v;
    }

    public Vare getVareMedStregkode(int stregkode)
    {
        int i=0;
        boolean found = false;
        Vare v = null;
        while (!found && i < varer.size()) 
        {       
            if (stregkode == varer.get(i).getStregkode())
            { 
                v = varer.get(i);
                found = true;

            }
            else 
            {
                i++;
            }
        }
        return v;
    }

    /**
     * Method deleteVare
     *
     * @param vareID A parameter
     * @return succes
     */
    public boolean deleteVare(int vareID)
    {        
        boolean succes = false;
        Vare v = getVare(vareID);
        if(varer.isEmpty() || v == null)
        {
            return succes;
        }
        else
        {
            varer.remove(v);
            succes = true;
        }      
        return succes;
    }

    /**
     * Method updateVare
     *
     * @param vareID A parameter
     * @param navn A parameter
     * @param beskrivelse A parameter
     * @param stregkode A parameter
     * @return succes
     */
    public boolean updateVare(int vareID, String navn, String beskrivelse, int stregkode, int minBeholdning, int maxBeholdning)
    {
        boolean succes = false;
        Vare v = getVare(vareID);
        v.setNavn(navn);
        v.setBeskrivelse(beskrivelse);
        v.setStregkode(stregkode);
        v.setMinBeholdning(minBeholdning);
        v.setMaxBeholdning(maxBeholdning);
        if(v.getNavn().equals(navn) && v.getBeskrivelse().equals(beskrivelse) && v.getStregkode() == stregkode &&
        v.getMinBeholdning() == minBeholdning && v.getMaxBeholdning() == maxBeholdning)
        {
            succes = true;
        }
        return succes;
    }

    

    /**
     * Method setPris
     * @param vareID A parameter
     * @param pris A parameter
     */
    public boolean setPris(int vareID, double pris)
    {        
        boolean succes = false;
        Vare v = getVare(vareID);
        v.setPris(pris);  
        if(v.getPris() == pris)
        {
            succes = true;
        }
        return succes;
    }

    /**
     * Method print
     *
     */
    public void print()
    {
        System.out.println("VareID \tVarenavn \tBeskrivelse \tPris \tBeholdning \tMinBeholdning \tMaxBeholdning");
        for(Vare vare : varer)
        {
            System.out.println(vare.toString()); 
        }
    }
    public void printVare(int vareID)
    {
        Vare v = getVare(vareID);
        System.out.println(v.toString());
    }

    /**
     * Method saveToFile
     * 
     * Saves to the vareFileHandler
     */
    public void saveToFile() throws IOException
    {
        fileHandler.saveToFile(varer);
    }

    /**
     * Method loadFromFile
     *
     * Loads from the vareFileHandler
     */
    public void loadFromFile() throws IOException, ClassNotFoundException
    {
        varer = fileHandler.readFromFile();
    }

}
